package com.cw.DesignModel23.Structural.AdapterPattern.adapter1;

/**
 * 对象适配器模式（常用方式）
 * 介绍
 * 基本思路和类的适配器模式相同，只是将Adapter类作修改，不是继承src类，而是持有src类的实例（聚合src类），以解决兼容性的问题。 即:持有 src类，实现 dst 类接口，完成src->dst的适配
 * 根据“合成复用原则”，在系统中尽量使用关联关系来替代继承关系
 * 对象适配器模式是适配器模式常用的一种
 */
public class VoltageAdapter2 implements IVoltage5V {

    /**
     * 关联关系-聚合
     */
    private Voltage220V voltage220V;


    /**
     * 通过构造器，传入一个 Voltage220V 实例
     *
     * @param voltage220v
     */
    public VoltageAdapter2(Voltage220V voltage220v) {
        this.voltage220V = voltage220v;
    }

    @Override
    public int output5V() {
        int dst = 0;
        if (null != voltage220V) {
            //获取220V 电压
            int src = voltage220V.output220V();
            System.out.println("使用对象适配器，进行适配~~");
            dst = src / 44;
            System.out.println("适配完成，输出的电压为=" + dst);
        }
        return dst;
    }

}
/**
 * 其他类和类适配器模式的一致
 *
 * 优缺点分析
 * 【优点】
 *
 * 对象适配器和类适配器其实算是同一种思想，只不过实现方式不同。根据合成复用原则，使用组合替代继承，所以它解决了类适配器必须继承src的局限性问题，也不再要求dst必须是接口
 * 使用成本更低，更灵活
 */

